#include<stdio.h>
#include<string.h>
#include<errno.h>

//进程退出
//自定义错误码结构
const char* error_string[] = {
        "Success",
        "open error",
        "other error"
};

//进程退出分为三种情况
//代码运行完毕，结果正确
//代码运行完毕，结果不正确
//进程异常终止
int main()
{


  //错误码通常是衡量一个库函数或者是系统调用一个函数的调用情况
  //退出码是一个进程退出的结果
  // int ret = 0;
  // printf("begin:%d\n",errno);
  // FILE* pf = fopen("./test.file","r");
  // if(pf == NULL)
  // {
  //   printf("after:%d,error string: %s\n",errno, strerror(errno));
  //   ret = errno;
  // }
  // return ret;

  //进程出异常本质是因为进程收到了对应的信号，自己终止了
  //于是父进程交给子进程的任务，父进程只需要通过子进程的退出码（0或者非0）、子进程是否有收到信号(1~64)两个数字就能知道子进程的结果
  //FPE错误
  // int a = 10;
  //   a /= 0;
   
  //SEGV错误
  int *p = NULL;
  *p = 10;
    
  //int i = 0;
  //for(;i < 100;i++)
  //{
  //    printf("%d : %s\n",i , strerror(i));
  //}
  //return 0;
}



//#include<unistd.h>
//#include<stdlib.h>
//typedef void (*callback_t)();
////进程创建
//#define N 10
//void Worker()
//{
//  int cnt = 10;
//  while(cnt)
//  {
//    printf("I am child process, pid:%d, ppid:%d, cnt:%d\n",getpid(), getppid(),cnt);
//    sleep(1);
//    cnt--;
//  }
//}
//void createSubProcess(int n,callback_t cb)
//{
//  int i = 0;
//  for(;i < n;i++)
//  {
//    sleep(1);
//    pid_t id = fork();
//    if(id == 0)
//    {
//      printf("create a child process success: %d\n",i);
//      //child
//      cb();
//      exit(0);
//    }
//  }
//}
//int main()
//{
//  createSubProcess(N,Worker);
//  //只有父进程走到这里
//  sleep(100);
//}
